﻿//#include<iostream>
//using namespace std;
//#define ok 0
//#define error -1
//
// 链表结点定义
//class ListNode
//{
//public:
//    int data;
//    ListNode* next;
//    ListNode() { next = NULL; }
//    ListNode(int m) 
//    {
//        next = NULL; 
//        data = m;
//    }
//};
// 带头结点的单链表类定义
//class LinkList
//{
//public:
//    ListNode* head;
//    int len;
//     操作定义
//    LinkList();
//    ~LinkList();
//    ListNode* LL_index(int i)    // 返回第i个结点的指针，如果不存在返回NULL
//    {
//        ListNode* p = head->next;
//        int j = 1;
//        while (p && j < i)
//        {
//            p = p->next;
//            ++j;
//        }
//        return p;
//    }
//    int LL_get(int i)
//    {
//        int item = 0;
//        ListNode  *p= head->next;
//        int j = 1;
//        while (p && j < i)
//        {
//            p = p->next;
//            ++j;
//        }
//        if (!p || j > i)
//        {
//            return -1;
//        }
//        else
//        {
//            item = p->data;
//        }
//        return item;
//    }
//     获取第i个元素的数据
//    int LL_insert(int i, int item)// 把数值item插入第i个位置
//    {
//        int j = 0; ListNode* p = head;
//        while (p && j < i-1)
//        {
//           p = p->next;
//            ++j;
//        }
//        if (!p|| j > i-1)
//        {
//            return -1;
//        }
//            ListNode *s = new  ListNode;
//            s->data = item;
//            s->next = p->next;
//            p->next = s;
//            len++;
//            return 0;
//    }
//
//    int LL_del(int i)     // 删除第i个结点     
//    {
//        int j = 0; ListNode* p = head;
//        while (p->next && j < i - 1)
//        {
//            p = p->next;
//            ++j;
//        }
//        if (!p->next || j > i - 1)
//        {      p  q 
//            return -1;
//        }
//            ListNode* q = new  ListNode;
//            q=p->next;
//            p->next = q->next;
//            delete q;
//            len--;
//            return 0;
//    }
//    void LL_display();              // 输出单链表的内容
//};
//LinkList::LinkList()
//{
//    head = new ListNode();
//    len = 0;
//}
//LinkList::~LinkList()
//{
//    ListNode* p, * q;
//    p = head;
//    while (p != NULL)
//    {
//        q = p;
//        p = p->next;
//        delete q;
//    }
//    len = 0;
//    head = NULL;
//}
//void LinkList::LL_display()
//{
//    ListNode* p;
//    p = head->next;
//    while (p)
//    {
//        cout << p->data << ' ';
//        p = p->next;
//    }
//    cout << endl;
//} 
//int main()
//{
//    int n,m,m1,m2;
//    cin >> n; LinkList linkList;
//    for (int i = 0; i < n; i++)
//    {
//        cin >> m;
//        cout << m << " ";
//        linkList.LL_insert(linkList.len + 1, m);
//    }
//    cout << endl;
//    for (int i = 0; i < 2; i++)
//    {
//        cin >> m1 >> m2;
//        int k=linkList.LL_insert(m1, m2);
//        if (k == -1)
//        {
//            cout << "error" <<endl;
//        }
//        else
//        linkList.LL_display();
//    }
//    for (int i = 0; i < 2; i++)
//    {
//        cin >> m1 ;
//        int k=linkList.LL_del(m1);
//        if (k == -1)
//        {
//            cout << "error" << endl;
//        }
//        else
//            linkList.LL_display();
//    }
//    for (int i = 0; i < 2; i++)
//    {
//        cin >> m1;
//        int k= linkList.LL_get(m1);
//        if (k == -1)
//        {
//            cout << "error" << endl;
//        }
//        else
//            cout << k << endl;
//    }
//
//    return 0;
//}
//#include<iostream>
//using namespace std;
//#define ok 0
//#define error -1
//
// 链表结点定义
//class ListNode
//{
//public:
////    int data;
////    int len;
////    ListNode* next;
////    ListNode* head;
////    ListNode() { next = NULL; }
////    ListNode(int n,int m)
////    {
////        next = NULL;
////        data = m;
////        len = n;
////    }
////    void LL_merge(ListNode* La, ListNode* Lb)
////    {
////
////        ListNode* p = new ListNode;
////        p = La;
////        p->next = Lb;
////    }
////    void LL_display()
////    {
////        ListNode* p;
////        p = head->next;
////        while (p)
////        {
////            cout << p->data << ' ';
////            p = p->next;
////        }
////        cout << endl;
////    }
////};
////int main()
////{
////    int n1, m1, n2, m2;
////    cin >> n1;
////    ListNode *p1=new ListNode[n1];
////    ListNode listNode;
////    for (int i = 0; i < n1; i++)
////    {
////        cin >> m1;
////        ListNode p1(listNode.len + 1, m1);
////    }
////    cin >> n2;
////    ListNode* p2 = new ListNode[n2];
////    for (int i = 0; i < n2; i++)
////    {
////        cin >> m2;
////        ListNode p2(listNode.len + 1, m2);
////    }
////    listNode.LL_merge(p1, p2);
////    return 0;
////}
//#include<iostream>
//using namespace std;
//#define ok 0
//#define error -1
//class ListNode
//{
//public:
//    int data;
//    ListNode* next;
//    ListNode() { next = NULL; }
//    ListNode(int m)
//    {
//        next = NULL;
//        data = m;
//    }
//};
//class LinkList
//{
//public:
//    ListNode* head;
//    int len;
//    LinkList()
//    {
//        head = new ListNode();
//        len = 0;
//    }
//    ~LinkList()
//    {
//        ListNode* p, * q;
//        p = head;
//        while (p != NULL)
//        {
//            q = p;
//            p = p->next;
//            delete q;
//        }
//        len = 0;
//        head = NULL;
//    }
//    int LL_insert(int i, int item)
//    {
//        int j = 0; ListNode* p = head;
//        while (p && j < i - 1)
//        {
//            p = p->next;
//            ++j;
//        }
//        if (!p || j > i - 1)
//        {
//            return -1;
//        }
//        ListNode* s = new  ListNode(item);
//        s->next = p->next;
//        p->next = s;
//        len++;
//        return 0;
//    }
//    int LL_merge(ListNode* La, ListNode*Lb)
//    {
//        ListNode* p1 = La->next;
//        int len1 = 0;
//        while (p1)
//        {
//            p1 = p1->next;
//            len1++;
//        }
//        ListNode* p2 = Lb->next;
//        while (p2)
//        {
//            p2 = p2->next;
//            len1++;
//        }
//        ListNode* p = La;
//        while (p->next )
//        {
//            p = p->next;
//        }
//        p->next = Lb->next;//处理头结点
//        Lb->next = NULL;//头结点为null
//        len = len1;
//        return 0;
//    }
//    void change()
//    {
//       for(int i=0;i<len-1;i++)
//       { 
//           ListNode* p = head->next;
//           for (int j = 0; j < len - i - 1; j++)
//           {
//               if ((p->data) > (p->next->data))
//               {
//
//                   int d = p->data;
//                   p->data = p->next->data;
//                   p->next->data = d;
//               }
//               p = p->next;
//           }
//        }
//    }
//    void LL_display()
//    {
//        ListNode* p;
//        p = head->next;
//        while (p)
//        {
//            cout << p->data << ' ';
//            p = p->next;
//        }
//        cout << endl;
//    }
//};
//int main()
//{
//    int n1, n2, m1, m2;
//    cin >> n1; 
//    LinkList linkList1;
//    for (int i = 0; i < n1; i++)
//    {
//        cin >> m1;
//        linkList1.LL_insert(linkList1.len + 1, m1);
//    }
//    LinkList linkList2;
//    cin >> n2;
//    for (int i = 0; i < n2; i++)
//    {
//        cin >> m2;
//        linkList2.LL_insert(linkList2.len + 1, m2);
//    }
//    int t= linkList1.LL_merge(linkList1.head, linkList2.head);
//    linkList1.change();
//    linkList1.LL_display();
//
//    return 0;
//}
//#include<iostream>
//using namespace std;
//#define ok 0
//#define error -1
//class ListNode
//{
//public:
//    int data;
//    ListNode* next;
//    ListNode() { next = NULL; }
//    ListNode(int m)
//    {
//        next = NULL;
//        data = m;
//    }
//};
//class LinkList
//{
//public:
//    ListNode* head;
//    int len;
//    LinkList()
//    {
//        head = new ListNode();
//        len = 0;
//    }
//    ~LinkList()
//    {
//        ListNode* p, * q;
//        p = head;
//        while (p != NULL)
//        {
//            q = p;
//            p = p->next;
//            delete q;
//        }
//        len = 0;
//        head = NULL;
//    }
//    int LL_insert(int i, int item)
//    {
//        int j = 0; ListNode* p = head;
//        while (p && j < i - 1)
//        {
//            p = p->next;
//            ++j;
//        }
//        if (!p || j > i - 1)
//        {
//            return -1;
//        }
//        ListNode* s = new  ListNode(item);
//        s->next = p->next;
//        p->next = s;
//        len++;
//        return 0;
//    }
//
//    // --- 这是修改后的 change 函数 ---
//    void change()
//    {
//        ListNode* p = head; // p 是 q 的前驱节点
//        ListNode* q = head->next; // q 是当前要处理的基准节点
//
//        // 遍历整个链表
//        while (q != NULL)
//        {
//            ListNode* q1 = q; // q1 从 q 开始，向后查找重复节点
//
//            // 从 q 的下一个节点开始查找重复
//            while (q1->next != NULL)
//            {
//                if (q->data == q1->next->data)
//                {
//                    // 找到重复节点，删除 q1->next
//                    ListNode* t = q1->next;
//                    q1->next = t->next; // 绕过待删除节点
//                    delete t;
//                    len--;
//                    // 注意：这里 q1 不需要移动，因为它的 next 已经指向了新节点，需要继续检查
//                }
//                else
//                {
//                    // 没有找到重复，q1 向后移动
//                    q1 = q1->next;
//                }
//            }
//
//            // 处理完以 q 为基准的所有重复节点后，移动 p 和 q 到下一个位置
//            p = q;
//            q = q->next;
//        }
//    }
//
//    void LL_display()
//    {
//        ListNode* p;
//        p = head->next;
//        while (p)
//        {
//            cout << p->data << ' ';
//            p = p->next;
//        }
//        cout << endl;
//    }
//};
//int main()
//{
//    int t, n, m;
//    cin >> t;
//    for (int i = 0; i < t; i++)
//    {
//        LinkList linkList1;
//        cin >> n;
//        for (int j = 0; j < n; j++)
//        {
//            cin >> m;
//            linkList1.LL_insert(linkList1.len + 1, m);
//        }
//        linkList1.change();
//        linkList1.LL_display();
//    }
//    return 0;
//}
#include<iostream>
using namespace std;
#define ok 0
#define error -1
class ListNode
{
public:
    char data;
    ListNode* next;
    ListNode* prior;
    ListNode() { next = NULL; prior = NULL; }
    ListNode(char m)
    {
        prior = NULL;
        next = NULL;
        data = m;
    }
};
class LinkList
{
public:
    ListNode* head;
    int len;
    LinkList()
    {
        head = new ListNode();
        len = 0;
    }
    ~LinkList()
    {
        ListNode* p, * q;
        p = head;
        while (p != NULL)
        {
            q = p;
            p = p->next;
            delete q;
        }
        len = 0;
        head = NULL;
    }
    ListNode* LL_insert(int i, char item)
    {
        int j = 0; ListNode* p = head;
        while (p && j < i - 1)
        {
            p = p->next;
            ++j;
        }
        if (!p || j > i - 1)
        {
            return NULL;
        }
        ListNode* s = new  ListNode(item);
        if (p->next != NULL)
        {
            p->next->prior = s;
        }
        s->next = p->next; 
        p->next = s; 
        s->prior = p; 
        len++;
        return s;
    }
    bool change()
    {
        bool flag = false;
        ListNode* p = head;
        while (p != NULL&&p->next!=NULL)
        {
            ListNode* q = p->next;
            int count = 1;
            while (q->next != NULL && q->data == q->next->data)
            {
                count++;
                q = q->next;
            }
            if (count >= 3)
            {//1 2 2 2 3
            //pr p   q n
                flag = true;
                ListNode* prior1 = p;
                ListNode* tail = q->next;
                prior1->next = tail;
                if (tail != NULL)
                {
                    tail->prior = prior1;
                }
                len = len - count;
                ListNode* t= p->next;
                 while (t != tail)
                 {
                     ListNode* temp = t;
                     t = t->next;
                     delete temp;
                 }
                 p= prior1;
            }
            else
            {
                p = q;
            }
        }
        return flag;
    }
    void print()
    {
        ListNode* p = head->next;
        if (!p)
        {
            cout << "-" << endl;
        }
        else
        {
            while (p)
            {
                cout << p->data;
                p = p->next;
            }
            cout << endl;
        }
    }
};
int main()
{
    int n, t, k1;
    char m, k2;
    cin >> n;
    LinkList linkList1;
    for (int i = 0; i < n; i++)
    {
        cin >> m;
        linkList1.LL_insert(linkList1.len + 1, m);
    }
    cin >> t;
    for (int j = 0; j < t; j++)
    {
        cin >> k1 >> k2;
        linkList1.LL_insert(k1 + 1, k2);
        while (linkList1.change()) {};
       
        linkList1.print();
    }
    return 0;
}
//#include<iostream>
//using namespace std;
//class ListNode
//{
//public:
//    int data;
//    ListNode* next; 
//    ListNode() { next = NULL;  }
//    ListNode(int m)
//    {
//        next = NULL;
//        data = m;
//    }
//};
//class LinkList
//{
//public:
//    ListNode* head;
//    LinkList()
//    {
//        head = new ListNode();
//    }
//    ~LinkList()
//    {
//        delete head ;
//    }
//    ListNode* circle(int n)
//    {
//        ListNode* phead=new ListNode(1);
//        ListNode* ptail=phead;
//        for (int i = 2; i <= n; i++)
//        {
//            ptail->next = new ListNode(i);
//            ptail = ptail->next;
//        }
//        ptail->next = phead;
//        return phead;
//    }
//    void change(int n, int k, int s)
//    {
//        ListNode* head = circle(n);
//        if (!head)
//        {
//            return;
//        }
//        ListNode* p = head;
//        while (p->next != head)
//        {
//            p = p->next;
//        }
//            for (int i = 0; i < s - 1; ++i)
//            {
//                p = p->next;
//            }
//            ListNode* q = p->next;
//            int len = n;
//            while (len>1)
//            {
//                int time = (k-1) % len;
//                for (int i = 0; i < time; i++)
//                {
//                    p = q;
//                    q = q->next;
//                }
//                cout << q->data << " ";
//                p->next = q->next;
//                delete q;
//                q = p->next;
//                len--;
//            }
//            cout << q->data << endl;
//            delete q; 
//        }
//};
//int main()
//{
//    
//    int t, n, k, s;
//    cin >> t;
//    LinkList linkList1;
//    for (int i = 0; i < t; i++)
//    {
//        cin >> n >> k >> s;
//        linkList1.change(n, k, s);
//    }
//    return 0;
//}